package study.innerClass;

/**
 *  外部类
 */
public class OutClass {

    private int id=1000;

    private String name="我是外部类的名字";

    private String intro="我是外部类的介绍";

    public String getName() {
        return name;
    }

    /**
     * 成员内部类（当层一个属性）
     * 内部类可以访问外部类的属性和方法
     * 但是注意： 当外部类的属性名和内部类的属性相同了的话
     */
    public class InnerClass{

        private  String innerName="我是内部类的名字";

        private String intro="我是内部的介绍";

        public String getInnerName() {
            return innerName;
        }

        public void innerIntro(){
            //System.out.println("内部类："+intro);
            //当外部类的属性和内部类的属性相同时，如何让问外部类的属性
            // 外部类名.this 指向外部类的引用
            System.out.println("内部类："+this.intro);
            System.out.println("内部类："+OutClass.this.intro);

        }

        public void innerSay(){
            //访问外部类的属性
            System.out.println("内部类访问外部类："+OutClass.this.name);
            System.out.println("我是内部类的方法");
        }

        public void innertest(){
            //调用外部类的方法
            outsay();

        }


    }


    //静态内部类
    public static class StaticInnerClass{

        private String staticName="我是静态内部类";

        public  void staticTest(){
            System.out.println(this.staticName);
            System.out.println("我是静态内部类的方法");
        }
    }

    /**
     * 方法
     */
    public void outsay(){
        System.out.println("我是外部类的方法 ");
    }

}
